﻿/**************************************
 *  标题：     数据库操作类 
 *  创建人：   尤平
 *  创建时间： 2019-08-15 12：00
 * 
 **************************************/

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;
using System.Data;

namespace PingYou.ADO
{
    public class BaseDBCon
    {
        public string conStr = string.Empty;
        //public SqlCredential credential = null;

        //數據庫連接字符串
        private static SqlConnection _conn = new SqlConnection(Common.GetXmlConnectionString("SQLServer"));  //创建SQL连接对象  
        public BaseDBCon()
        {
            this.conStr = Common.GetXmlConnectionString("SQLServer");

        }
        public BaseDBCon(string conStr)
        {
            if (!string.IsNullOrWhiteSpace(conStr))
            {
                _conn = new SqlConnection(conStr);  //创建SQL连接对象  
            }
        }

        #region 初始化 数据库链接

        public static SqlConnection InitSqlConn(SqlConnection conn)
        {
            try
            {
                if (conn == null)
                {
                    conn = _conn;
                }
            }
            catch (Exception myEx)
            {
                Common.WriteLogErr("InitSqlConn:" + myEx.Message);
            }
            return conn;
        }
        #endregion

        #region 新增、修改、删除
        /// <summary>
        /// 新增
        /// </summary>
        /// <param name="sql">SQL语句</param>
        /// <param name="conn">数据库链接</param>
        /// <returns></returns>
        public static int Save(string sql, SqlConnection conn = null)
        {
            int result = 0;
            conn = InitSqlConn(conn);
            try
            {
                conn.Open();
                SqlCommand sqlCommand = new SqlCommand(sql, conn);                 //这里的SqlCommand表示要进行一次数据库的
                result = sqlCommand.ExecuteNonQuery();

            }
            catch (Exception myEx)
            {
                Common.WriteLogErr("InitSqlConn:" + myEx.Message);
            }
            finally
            {
                conn.Close();
            }
            return result;
        }
        #endregion

        #region 查询DataTable
        /// <summary>
        /// 
        /// </summary>
        /// <param name="sql">sql</param>
        /// <param name="dt">返回的数据集合</param>
        /// <param name="conn">数据库连接</param>
        public void Fill(string sql, DataTable dt, SqlConnection conn = null)
        {
            conn = InitSqlConn(conn);
            try
            {
                conn.Open();                                                                       //打开  
                SqlDataAdapter mySqlDataAdapter = new SqlDataAdapter(sql, conn);                   //实例化SqlDtatAdapter并执行SQL语句，至于什么是SQLDataAdapter，  
                //就是用来连接DataSet与数据库的，DataSet是C#中用来保存数据库数据的，  
                //在这里没有用DataSet，不过原理是一样的，SQLDataAdapter从数据库中取得数据  
                //然后再DataSet中创建列与行来填充，个人理解。  
                mySqlDataAdapter.Fill(dt);                                                     //填充table 
            }
            catch (Exception myEx)
            {
                Common.WriteLogErr("InitSqlConn:" + myEx.Message);
            }
            finally
            {
                conn.Close();
            }
        }
        #endregion

        #region 分页查询DataSet
        /// <summary>
        /// 分页查询DataSet
        /// </summary>
        /// <param name="sql">sql</param>
        /// <param name="ds">查询出的数据集合</param>
        /// <param name="pageIndex">页码</param>
        /// <param name="pageSize">页面记录数</param>
        /// <param name="tableName">返回的table表名称</param>
        /// <param name="conn">数据库连接</param>
        public void Fill(string sql, DataSet ds, int pageIndex, int pageSize, string tableName, SqlConnection conn = null)
        {
            conn = InitSqlConn(conn);
            try
            {
                conn.Open();                                                                       //打开  
                SqlDataAdapter mySqlDataAdapter = new SqlDataAdapter(sql, conn);                   //实例化SqlDtatAdapter并执行SQL语句，至于什么是SQLDataAdapter，  
                //就是用来连接DataSet与数据库的，DataSet是C#中用来保存数据库数据的，  
                //在这里没有用DataSet，不过原理是一样的，SQLDataAdapter从数据库中取得数据  
                //然后再DataSet中创建列与行来填充，个人理解。  
                mySqlDataAdapter.Fill(ds, pageIndex, pageSize, tableName);                                                     //填充table 
            }
            catch (Exception myEx)
            {
                Common.WriteLogErr("InitSqlConn:" + myEx.Message);
            }
            finally
            {
                conn.Close();
            }
        }
        #endregion
    }
}
